package dao;

import model.Order;
import java.util.List;
import java.util.Map;

public interface OrderDao { // 订单数据访问接口 完成人：姜凯严、邓亦明 7/5
    boolean addOrder(Order order); // 添加订单

    boolean updateOrder(Order order); // 修改订单

    boolean deleteOrder(int orderId); // 删除订单

    Order findOrder(int orderId); // 根据订单ID查找订单

    List<Order> findAll(); // 查询所有订单

    /**
     * 批量添加订单并更新相关红酒库存，并在一个事务中完成。
     * 
     * @param newOrders           要添加的订单列表（每个订单的code字段应在内部设置）
     * @param redWineStockChanges 红酒ID到其购买数量的映射，用于计算库存减少量
     * @return 成功生成的8位订单标识码，如果失败返回-1
     */
    int addOrdersBatchAndUpdateStocks(List<Order> newOrders, Map<Integer, Integer> redWineStockChanges);

    /**
     * 根据标识码更新一组订单的状态。
     * 
     * @param orderCode 订单标识码
     * @param newStatus 新的状态
     * @return 是否所有匹配订单都更新成功
     */
    boolean updateOrdersStatusByCode(int orderCode, Order.OrderStatus newStatus);
}